/* CPP Assignemnt 3 (COSC1152-2011-S2)
 * Elliott O'Dea-Joyce s3074110@student.rmit.edu.au
 * Ross Nye s9455459@student.rmit.edu.au
 */

#ifndef GRAPH_FACTORY_H
#define GRAPH_FACTORY_H


#include <iostream>
#include <fstream>
#include <boost/config.hpp>
#include <iostream>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/prim_minimum_spanning_tree.hpp>
#include <boost/graph/kruskal_min_spanning_tree.hpp>

#include "graph_strat.h"
#include "tri.h"
#include "utils.h"


class GraphFactory
{
	public:
		static GraphFactory* create(int type);
		virtual void generateMST(MakeGraph* mg) = 0;
		virtual const char* getAlgoName() = 0;
};


class KruskalsFactory : public GraphFactory
{
	public:
		static GraphFactory* create();
		void generateMST(MakeGraph* mg);
		const char* getAlgoName() { return "Kruskals"; };
		
};

class PrimsFactory : public GraphFactory
{
	public:
		static GraphFactory* create();
		void generateMST(MakeGraph* mg);
		const char* getAlgoName() { return "Prims"; };

};

#endif
